ABC 122 D - We Like AGC
過去3文字分の状態を保存
入れ替えたあとのパターンを作成し、当てはまっていればスキップ
そうでない状態から次の状態を求める
code: abc122_d.js
class Main {
solve() {
const mod = 1e9 + 7;
const n = parseInt(input.nextLine());
const chars = 'A','T','G','C' ;
const ng = '.AGC','AG.C','A.GC','.GAC','.ACG'.map((p) => new RegExp(p));
const dp=[];
for (let i = 0; i <= n; ++i) { dpi = []; }
dp0'TTT' = 1;
for (let i = 1; i <= n; ++i) {
for (const key of chars) {
for (const prev in dpi-1) {
if (ng.some((p) => p.test(prev+key))) { continue; };
const cur = prev.substr(1)+key;
dpicur = dpicur !== undefined ? dpicur : 0;
dpicur += dpi-1prev;
dpicur %= mod;
}
}
}
let ret = [];
for (let k in dpn) { ret.push(dpnk); }
console.log(ret.reduce((a,b)=>(a+b) % mod));
}
}
使用ライブラリ
入出力